package yxy.apple.util;

import java.util.Comparator;
import java.util.LinkedList;

public class SortedQueue<E extends Comparable<E>> {
	private LinkedList<E> list = new LinkedList<>();

	/**
	 * 添加一个元素，会自动进行排序处理
	 * 
	 * @param element
	 */
	public void put(E element) {
		int index = this.jump(element);
		this.list.add(index, element);
	}

	//TODO 考虑二分法
	private int jump(E element) {
		int result = 0;
		if (this.list.size() > 0) {
			for (int index = this.list.size() - 1; index >= 0; index--) {
				E e = this.list.get(index);
				if (element.compareTo(e) >= 0) {
					result = index + 1;
					break;
				}
			}
		}
		return result;
	}

	/**
	 * 对队列整体进行重排序，一般在已有元素的排序标志发生改变时调用。
	 */
	public void sort() {
		this.list.sort(new Comparator<E>() {
			@Override
			public int compare(E o1, E o2) {
				return o1.compareTo(o2);
			}
		});
	}

	/**
	 * 取出并移除队列首元素
	 * 
	 * @return
	 */
	public E poll() {
		return this.list.poll();
	}

	/**
	 * 取出但不移除队列首元素
	 * 
	 * @return
	 */
	public E peek() {
		return this.list.peek();
	}

	/**
	 * 移除队列中某个元素
	 * 
	 * @param element
	 * @return
	 */
	public boolean remove(E element) {
		return this.list.remove(element);
	}

	/**
	 * 当前队列长度
	 * 
	 * @return
	 */
	public int size() {
		return this.list.size();
	}

	/**
	 * 清空队列
	 */
	public void clear() {
		this.list.clear();
	}

}
